﻿#define _CRT_SECURE_NO_WARNINGS 1

#include"test.h"

///*
// *	  
// *    探索iterator、const_iterator、const iterator
// *
// *    typedef value_type* iterator;
// *	  vector<int>::iterator it = v.begin();
// *
// *	  const vector<int>::iterator cit = v.begin();
// *	  const value_type* cit = v.begin();
// * 
// *    typedef const value_type* const_iterator;
// *	  vector<int>::const_iterator it = v.begin();
// */
//void test1() 
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	vector<int> v(arr, arr + 10);
//
//	vector<int>::iterator it = v.begin();
//	while (it != v.end())
//		cout << *it++ << ',';
//	cout << endl;
//
//	const vector<int>::iterator cit = v.begin();
//	//cout << *cit++ << endl;
//}
//typedef int* T;
//typedef const int* T1;
//void test2()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	T p1 = arr; p1++;
//	int* p11 = arr; p11++;
//
//	//变量"指向"的内容不能被修改
//	const T p2 = arr; 
//	//p2++; 为什么会报错？
//	const int* p22 = arr; p22++;
//	
//	//变量的内容不能被修改
//	//T const t1 = arr; t1++;
//	//int* const t11 = arr; t11++;
//}
////vector<string> operator*(vector<string>& v, string& str)
////{
////	vector<string> Tmp;
////	for (auto v1 : v)
////	{
////		for (auto s : str)
////		{
////			v1 += s;
////			Tmp.push_back(v1);
////		}
////	}
////	return Tmp;
////}
//vector<string> test(vector<string>& v, string& str)
//{
//	vector<string> Tmp;
//	for (auto v1 : v)
//	{
//		for (auto s : str)
//		{
//			v1 += s;
//			Tmp.push_back(v1);
//		}
//	}
//	return Tmp;
//}
//
////vector<string> Tmp;
////for (auto v1 : retv)
////{
////	for (auto s1 : v[index])
////	{
////		Tmp.push_back(v1 + s1);
////	}
////}
////swap(retv, Tmp);
////
////
////class Solution
////{
////	friend vector<string> test(vector<string>& v, string& str);
////public:
////	vector<string> letterCombinations(string digits) {
////		// 创建一个数组，将按键信息，保存上去~
////		vector<string> v({ "xxxx","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" });
////		// 待返回
////		vector<string> retv;
////		// 遍历
////		for (auto c : digits)
////		{
////			// 此时为 c == 2，v1[c]  = 'abc'
////			int index = c - '0';
////			if (retv.size() == 0)
////			{
////				for (auto c1 : v[index])
////				{
////					string Tmp(1, c1);
////					retv.push_back(Tmp);
////				}
////			}
////			else
////			{
////				retv = test(retv, v[c]);
////			}
////		}
////		return retv;
////	}
////};
////int main()
////{
////	Solution().letterCombinations("23");
////	return 0;
////}

//void test1()
//{
//	int* a1 = new int(4);
//	cout << *a1 << endl;
//
//	int* a2 = new int[4] {1, 2, 3, 4};
//	for (int i = 0; i < 4; i++)
//		cout << *(a2+i) << ' ';
//	cout << endl;
////}
//
//class Person
//{
//public:
//	Person()
//		:name("常梦圆")
//		, old(0)
//	{
//		cout << "Person()" << endl;
//	}
//	void test1()
//	{
//
//	}
//private:
//	string name;
//	size_t old = 0;
//};
//
//class stu:public Person
//{
//public:
//	stu()
//		:Person()
//		, work("学生")
//	{
//		cout << "stu()" << endl;
//	}
//	void test2()
//	{
//		
//	}
//private:
//	string work;
//};
//
//class ZMH : public string
//{
//public:
//
//	void test1()
//	{
//		push_back('c');
//	}
//};
//
//int main()
//{
//	cout << sizeof(string) << endl;
//	cout << sizeof(ZMH) << endl;
//	return 0;
////}
//int PrevBackPoint(int* n, int begin, int end)
//{
//	int keyi = begin;
//
//	int prev = begin, cur = begin + 1;
//	while (cur <= end)
//	{
//		if (n[cur] < n[keyi] && ++prev != cur)
//			swap(*(n + prev), *(n + cur));
//
//		++cur;
//	}
//	swap(*(n + prev), *(n + keyi));
//		return prev;
//}
//
//void SortQuick(int* n, int begin, int end)
//{
//	if (begin >= end)
//		return;
//
//	int mid = PrevBackPoint(n, begin, end);
//
//	SortQuick(n, begin, mid - 1);
//	SortQuick(n, mid + 1, end);
//}
//#include<stack>
//void SortQuickNonRe(int* n, int size)
//{
//	stack<int> ZMH;
//	ZMH.push(size - 1);
//	ZMH.push(0);
//	while (!ZMH.empty())
//	{
//		int left = ZMH.top();
//		ZMH.pop();
//		int right = ZMH.top();
//		ZMH.pop();
//
//		if (left >= right)
//			continue;
//
//		int mid = PrevBackPoint(n, left, right);
//		ZMH.push(right);
//		ZMH.push( mid + 1);
//		ZMH.push( mid - 1);
//		ZMH.push(left);
//	}
//}
//

void test1()
{
	int arr[] = { 28, 16, 32, 12, 60, 2, 5, 72 };
	MergeSort(arr, sizeof(arr) / sizeof(arr[0]));
	for (auto v : arr)
		cout << v << ' ';
}

void test2()
{
	int a = 1314;
	int b = 521;
	cout << "test2:" << &a << endl;
	cout << "test2:" << &b << endl;
	cout << (&a > &b) << endl;
}

template<class T>
class mystack : public vector<T>
{
public:

	mystack()
		:vector<T>(){}

	void push(const T& val)
	{
		vector<T>::push_back(val);
	}
	void pop()
	{
		vector<T>::pop_back();
	}
	T& top() const
	{
		return vector<T>::back();
	}
	bool empty() const
	{
		return vector<T>::empty();
	}
	size_t size() const
	{
		return vector<T>::size();
	}
};

void test3()
{
	mystack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
}

class LS
{
public:
	~LS()
	{
		cout << "~LS()" << endl;
	}
};

class CMY : public LS
{
public:
	~CMY()
	{
		cout << "~CMY()" << endl;
		LS::~LS();
	}
};
//
//int main()
//{
//	CMY cmy;
//	return 0;
//}
//
//class Person
//{
//protected:
//	string name = "周天津"; // 名字
//	int old = 58; // 年龄
//	string ID = "111081200631313111"; // 身份证号
//	string tel = "11188888888"; // 手机
//};
//
//class teacher : public Person
//{
//public:
//	void stude()
//	{
//		cout << "老师：" << name << endl;
//		cout << "年龄：" << old << endl;
//		cout << "ID：" << ID << endl;
//		cout << "电话：" << tel << endl;
//
//		cout << "职工：" << work << endl;
//	}
//private:
//	string work = "数学老师";
//};
//
//int main()
//{
//	teacher ZTJ;
//	ZTJ.stude();
//
//	return 0;
//}
//
//class Father
//{
//	// ... 定义在Father类中的方法
//	// ... 定义在Father类中的属性
//};
//
//class child : public Father
//{
//	// ... child类新增添的类的属性
//	// ... child类新增添的类的方法
//};

//class Person // 基类
//{
//public:
//	Person() = default; // 强制编译器生成 -> 默认构造函数
//
//	Person(const char* name, size_t age, const char* Addr) //普通构造函数
//		:_name(name)
//		, _age(age)
//		, _Addr(Addr) 
//	{}
//
//protected:
//	string _name = "庄梦涵"; // 名字
//	size_t _age = 17;  // 年龄
//	string _Addr = "河南龙门镇庄村"; // 籍贯
//};
//
//class student : public Person // 派生类
//{
//public:
//
//	student() = default; // 强制编译器生成 -> 默认构造函数
//
//	student(const char* name, size_t age, const char* Addr, const char* grade) // 普通构造函数
//		:Person(name, age, Addr)
//		, _grade(grade)
//	{}
//
//	void test()
//	{
//		cout << "_name:" << _name << endl;
//		cout << "_age:" << _age << endl;
//		cout << "_Addr:" << _Addr << endl;
//		cout << "grade:" << _grade << endl;
//	}
//protected:
//	string _grade = "大二"; 
//};
//
//int main()
//{
//	student cmy("常梦圆",17,"神垕","大四");
//	cmy.test();
//	return 0;
//}

//class Person // 基类
//{
//public:
//	~Person()
//	{
//		cout << "~Person()" << endl;
//	}
//};
//
//struct A
//{
//	~A() {
//		cout << "~A()" << endl;
//	}
//};
//
//class student : public Person // 派生类
//{
//	A _a;
//public:	
//	~student() 
//	{
//		cout << "~student() " << endl;
//		~Person();
//	}
//};
//
//int main()
//{
//	student tmp;
//	return 0;
//}
//class Person 
//{
//public:
//	int nums = 198;
//	void test(int n)
//	{
//		cout << "void test(int n)" << endl;
//	}
//};
//
//class student : public Person
//{
//public:
//	int nums = 158;
//	void test()
//	{
//		cout << "void test(int n)" << endl;
//	}
//};
//
//int main()
//{
//	student ZMH;
//	cout << ZMH.Person::nums << endl; // 子类指针
//
//	return 0;
//}
//
//class Person
//{
//public:
//	Person& operator=(const Person& val)
//	{
//		cout << "Person& operator=(const Person& val)" << endl;
//
//		return *this;
//	}
//};
//
//class student : public Person
//{
//public:
//	Person& operator=(const student& val)
//	{
//		Person::operator=(val);
//		cout << "wwwwwwwwwwwwwwwwwwwwwwww" << endl;
//
//		return *this;
//	}
//};
//
//int main()
//{
//	student ZMH, PYB;
//	PYB = ZMH;
//	return 0;
//}
// class Person 
// {
// protected:
//	 string name = "ZMH Is My Goal";
//public:
//	friend void test1(Person& val1, Student& val2);
//};
//
// class Student : public Person
// {
//	string like = "ZMH like to read book";
// public:
//	friend void test1(Person& val1, Student& val2);
// };
//
// void test1(Person& val1, Student& val2)
// {
//	 cout << val1.name << endl;
//	 cout << val2.like << endl;
//
// }
//
// int main()
// {
//	 Person zmh;
//	 Student lyy;
//	 test1(zmg,lyy);
//	 return 0;
// }
//
//class Father
//{
//	friend void Print(const Father val);
//public:
//	Father(int year = 2004, int month = 6, int day = 24)
//		:_year(year)
//		,_month(month)
//		,_day(day){}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//class Child : public Father
//{
//
//};
//
//void Print(const Child val = Father(),)
//{
//	cout << val._year << endl;
//	cout << val._month << endl;
//	cout << val._day << endl;
//}
//
//int main()
//{
//	Print(Child());
//	return 0;
//}
//class Student;
//
//class Person
//{
//public:
//	friend void Display(const Person& p, const Student& s);
//protected:
//	string _name; // 姓名
//};
//
//class Student : public Person
//{
//protected:
//	int _stuNum; // 学号
//};
//
//void Display(const Person& p, const Student& s)
//{
//	cout << p._name << endl;
//	cout << s._stuNum << endl;
//} 
//int main()
//{
//	Person p;
//	Student s;
//	// 编译报错：error C2248: “Student::_stuNum”: ⽆法访问 protected 成员
//	// 解决⽅案：Display也变成Student 的友元即可
//	Display(p, s);
//	return 0;
//}
/*
class CMyString
{
public:
	CMyString(char* val = nullptr);
	CMyString(const CMyString& str);
	~CMyString();
	CMyString& operator=(CMyString copy);
public:
	char* m_pData;
};

CMyString& CMyString::operator=(CMyString copy)
{
	swap(m_pData, copy.m_pData);

	return *this;
}      */    

//// template<class T,size_t N>
//class CMyArray
//{
//public:
//	CMyArray()
//		:_data(0)
//		 {};
//
//	int _data[10];
//	size_t _size = 10;
//};
//
//
//int main()
//{
//	CMyArray arr;
//	for (auto a : arr._data)
//		cout << a;
//	cout << endl;
//	return 0;
//}
//
//class WK
//{
//public:
//	WK()
//	{
//		cout << "当前已创建ZMH/WK类个数：" << ++count << endl;
//	}
//	~WK()
//	{
//		cout << "当前已创建ZMH/WK类个数：" << --count << endl;
//	}
//protected:
//	static int count;
//};
//
//class ZMH :public WK {};
//
//int WK::count = 0;
//
//int main()
//{
//	WK d1,d2,d3;
//
//	{
//		ZMH d4, d5, d6;
//	}
//	
//	WK d7;
//
//	return 0;
////}
//
//int main()
//{
//	string str("google");
//	char tmp = '\0';
//
//	int i = 0;
//	for (; i < str.size(); i++)
//		tmp ^= str[i];
//
//	cout << tmp << endl;
//
//	int count = 0;
//	for (auto c : str)
//	{
//		if (tmp == c)
//			cout << count;
//
//		count++;
//	}
//
//	return 0;
//}